目录
一、 相关原理知识……………………………………………………………………………………………. 3
二、 具体实验流程……………………………………………………………………………………………. 3
(1)、 wireshark的使用…………………………………………………………………………………. 3
(2)、HTTP分析…………………………………………………………………………………………… 6
(3)、TCP分析…………………………………………………………………………………………….. 9
(4)、IP分析………………………………………………………………………………………………. 16
(5)、ARP分析…………………………………………………………………………………………… 22
(6)、UDP分析…………………………………………………………………………………………… 25
(7)利用 WireShark 进行 DNS 协议分析……………………………………………………. 28
(8)利用 Wireshark 分析 Ethernet 数据帧……………………………………………………. 31
实验目的: |
熟悉并掌握 Wireshark 的基本操作 了解网络协议实体间进行交互以及报文交换的情况。 |
实验内容: |
1) 学习 Wireshark 的使用 2) 利用 Wireshark 分析 HTTP 协议 3) 利用 Wireshark 分析 TCP 协议 4) 利用 Wireshark 分析 IP 协议 5) 利用 Wireshark 分析 Ethernet 数据帧 选做内容: a) 利用 Wireshark 分析 DNS 协议 b) 利用 Wireshark 分析 UDP 协议 c) 利用 Wireshark 分析 ARP 协议 |
实验过程: |
一、 相关原理知识 分组嗅探器: 观察在正在运行协议实体间交换报文的基本工具被称为分组嗅探 器(packet sniffer)。顾名思义,一个分组嗅探器俘获(嗅探)计算机发 送和接收的报文。一般情况下,分组嗅探器将存储和显示出被俘获报文 的各协议头部字段的内容。图 6-1 为一个分组嗅探器的结构 Wireshark****: Wireshark 是一种可以运行在 Windows, UNIX, Linux 等操作系统上的分组分 析器。 二、 具体实验流程 (1)、 wireshark的使用 本机IPV4: 172.20.69.163 本机ipv6:2001:250:fe01:130:b5a7:7d2c:ed7b:abe2 本机MAC:9C-FC-E8-30-6E-f7 Ø启动主机上的 web 浏览器。 Ø启动 Wireshark。你会看到如图 6-2 所示的窗口,只是窗口中没有 任何分组列表。 Ø开始分组俘获:选择“capture”下拉菜单中的“Capture Options”命 令,会出现如图 6-3 所示的“Wireshark: Capture Options”窗口,可 以设置分组俘获的选项 Ø开始分组俘获后,会出现如图 6-5 所示的窗口。该窗口统计显示 各类已俘获数据包。在该窗口的工具栏中有一个“stop”按钮,可以 停止分组的俘获。但此时你最好不要停止俘获分组。 Ø在运行分组俘获的同时,在浏览器地址栏中输入某网页的 URL, 如:http://www.hit.edu.cn。为显示该网页,浏览器需要连接 www.hit.edu.cn 的服务器,并与之交换 HTTP 消息,以下载该网页。 包含这些 HTTP 报文的以太网帧将被 Wireshark 俘获。 Ø当完整的页面下载完成后,单击 Wireshark 菜单栏中的 stop 按钮, 停止分组俘获。Wireshark 主窗口显示已俘获的你的计算机与其他 网络实体交换的所有协议报文,其中一部分就是与 www.hit.edu.cn 服务器交换的 HTTP 报文。此时主窗口与图 6-3 相似。 Ø在显示筛选规则中输入“http”,单击“回车”,分组列表窗口将只显 示 HTTP 协议报文。  |
实验结果: |
(2)、HTTP分析 1. HTTP GET/response****交互 ²启动 Web browser,然后启动 Wireshark 分组嗅探器。在窗口的显 示过滤说明处输入“http”,分组列表子窗口中将只显示所俘获到的 HTTP 报文。 ²开始 Wireshark 分组俘获。 ²在打开的 Web browser 窗 口 中 输 入 一 下 地 址 : http://cs.hit.edu.cn ²停止分组俘获。 ²****你的浏览器运行的是 HTTP1.0****,还是 HTTP1.1****?你所访问的服务 器所运行 HTTP 协议的版本号是多少? 浏览器运行HTTP1.1 服务器运行HTTP1.1 ²****你的浏览器向服务器指出它能接收何种语言版本的对象? Accept: (简体中文)Zh-CN,zh;q=0.9/r/n ²****你的计算机的 IP 地址是多少? 本机IPV4: 172.20.69.163 服务器 http://cs.hit.edu.cn/ 的 IP 地址是多少? 服务器IP地址219.217.226.17 ²****从服务器向你的浏览器返回的状态代码是多少? 200 OK 表示请求成功,信息在返回的报文里 (若后续再次刷新则可能会有304,代表读取缓存) 2. HTTP 条件 GET/response 交互 ²启动浏览器,清空浏览器的缓存(在浏览器中,选择“工具”菜单 中的“Internet 选项”命令,在出现的对话框中,选择“删除文件”)。 ²启动 Wireshark 分组俘获器。开始 Wireshark 分组俘获。 ²在浏览器的地址栏中输入以下 URL: http://cs.hit.edu.cn/和http://example.com,在 你的浏览器中重新输入相同的 URL 或单击浏览器中的“刷新”按 钮。 ²停止 Wireshark 分组俘获,在显示过滤筛选说明处输入“http”,分组 列表子窗口中将只显示所俘获到的 HTTP 报文。 根据俘获窗口内容,思考以下问题: ²****分析你的浏览器向服务器发出的第一个 HTTP GET 请求的内容, 在该请求报文中,是否有一行是:IF-MODIFIED-SINCE? 第一个HTTP GET请求报文中都没有IF-MODIFIED-SINCE http://cs.hit.edu/cn: ²****分析服务器响应报文的内容,服务器是否明确返回了文件的内 容?如何获知? 服务器在第一个GET请求之后,给出的第一个响应,响应码为200 OK代表成功,而响应报文中明确的返回了该网页需要哪些内容 获知方式是通过返回了一段 HTML 标记码,包括了网页的文本。 (如果此时返回的响应码为404,则代表内容不存在不会返回文件内容) 服务器在第一个GET中返回了文件的内容如下。可以看出服务器返回的文件内容是用来构成主页HTML的其他元素 如下图访问http://cs.hit.edu/cn,比如/_css/_system/ssystem.css代表要明确返回这个css内容: ²分析你的浏览器向服务器发出的较晚的“HTTP GET”****请求,在该请 求报文中是否有一行是:IF-MODIFIED-SINCE?如果有,在该首 部行后面跟着的信息是什么? 较晚的GET请求拥有一行IF-MODIFIED-SINCE。 后面跟着的信息是浏览器缓存网页最后一次修改时间 If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。 如下图访问http://example.com,比如标记了IF-MODIFIED-SINCE:Thu, 17 Oct 2019 07:18:26 GMT/r/n: 代表浏览器缓存最后修改时间为2019年07:18:26 ²****服务器对较晚的 HTTP GET 请求的响应中的 HTTP 状态代码是多 少?服务器是否明确返回了文件的内容?请解释 出现响应码304的响应,服务器不会明确返回文件内容 因为如果当服务器检测IF-MODIFIED-SINCE和Last-Modified一致没有变化 则返回响应码304,客户端可以使用本地仍为最新版本的缓存文件 如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是:服务端已经执行了GET,但文件未变化 如下图访问http://example.com,比如标记了Last-Modified:Thu, 17 Oct 2019 07:18:26 GMT/r/n,发现和IF-MODIFIED-SINCE是一致的所以可以直接读取缓存返回304 (3)、TCP分析 注:访问以下网址需要设置代理服务器。如无法访问可与实验 TA 联系,下载 tcp-Wireshark-trace 文件,利用该文件进行 TCP 协议分析。 A. 俘获大量的由本地主机到远程服务器的 TCP 分组 (1) 启动浏览器,打开http://gaia.cs.umass.edu/wireshark-labs/alice.txt 网页,得到ALICE’S ADVENTURES IN WONDERLAND文本, 将该文件保存到你的主机上。 (2) 打开http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html , 如图6-6所示,窗口如下图所示。在Browse按钮旁的文本框中 输入保存在你的主机上的文件ALICE’S ADVENTURES IN WONDERLAND的全 名(含路径),此时不要按 “Upload alice.txt file”按钮。 图6-6 Wireshark-labs网页截图 (3) 启动Wireshark,开始分组俘获。 (4) 在浏览器中,单击“Upload alice.txt file”按钮,将文件上传到 gaia.cs.umass.edu服务器,一旦文件上传完毕,一个简短的贺 词信息将显示在你的浏览器窗口中。 (5) 停止俘获。 B. 浏览追踪信息 在显示筛选规则中输入“tcp”,可以看到在本地主机和服务器之间 传输的一系列 tcp 和 http 报文,你应该能看到包含 SYN 报文的三次握手。 也可以看到有主机向服务器发送的一个 HTTP POST 报文和一系列的 “http continuation”报文。 Ø****向 gaia.cs.umass.edu 服务器传送文件的客户端主机的 IP 地址和 TCP 端口号是多少? 客户端IP:172.20.13.195 TCP端口号:8394 Ø****Gaia.cs.umass.edu 服务器的 IP 地址是多少?对这一连接,它用来 发送和接收 TCP 报文的端口号是多少? 服务器IP地址:128.119.245.12 发送TCP端口号80 接收TCP端口号80 Ø****客户服务器之间用于初始化 TCP 连接的 TCP SYN 报文段的序号 (sequence number)是多少?在该报文段中,是用什么来标示该 报文段是 SYN 报文段的? 初始化 TCP 连接的 TCP SYN 报文段的序号Seq是 0。 在该报文段中,通过设置Flags中的SYN位为1,来表示该报文段是 SYN 报文段。 Ø服务器向客户端发送的 SYNACK 报文段序号是多少?该报文段 中,Acknowledgement 字段的值是多少?Gaia.cs.umass.edu 服务器 是如何决定此值的?在该报文段中,是用什么来标示该报文段是 SYNACK 报文段的? SYNACK报文段序号Seq为0 Acknowledge字段的值是1,Gaia.cs.umass.edu服务器通过客户端发来的SYN请求报文段的seq序号(0)加1来决定Acknowledge值 通过flags中的SYN与ACK都标记为1,来表示这个报文段是SYNACK Ø你能从捕获的数据包中分析出 tcp 三次握手过程吗? 一次握手:客户端发送带有 SYN 标志的连接请求数据包给服务端,Seq=0 二次握手:服务端发送带有 SYN+ACK 标志的连接请求和应答数据包给客户端,Seq=0.Ack根据客户端之前发来的seq=0加上1得到ack=1 三次握手:客户端发送带有 ACK 标志的应答数据包给服务端(可以携带数据了),seq=1,ack根据服务器发来的seq=0加上1得到ack=1 Ø****包含 HTTP POST 命令的 TCP 报文段的序号是多少? 三次握手后的第一份PSH,ACK 序号是1 Ø****如果将包含 HTTP POST 命令的 TCP 报文段看作是 TCP 连接上的 第一个报文段,那么该 TCP 连接上的第六个报文段的序号是多 少?是何时发送的?该报文段所对应的 ACK 是何时接收的? 第六个报文段序号6252 发送时间: 第一个报文段发送时间:15:33:52.905015000 第六个报文段发送时间:15:33:52.905116000 则TCP 连接上的第六个报文段在第一个报文段发送0.00101s之后发送,在 HTTP POST 发送之前,TCP连接建立之后发送 寻找接收ACK=6252的报文 第六个对应的ACK接收时间为15:33:53.180610000,第六个报文段发送时间:15:33:52.905116000 即第六个报文段发送0.275494后对应的ACK被接收 Ø****前六个 TCP 报文段的长度各是多少? 前六个长度各自为 707,1386,1386,1386,1386,1386 Ø****在整个跟踪过程中,接收端公示的最小的可用缓存空间是多少? 限制发送端的传输以后,接收端的缓存是否仍然不够用? 接收端公示的最小的可用缓存空间是39168, 窗口大小整体递增,接收端的缓存足够用 Ø****在跟踪文件中是否有重传的报文段?进行判断的依据是什么? 没有出现重传,因为客户端发送的报文序列号1,708,2094,3480,4866,6252…..没有出现重复的情况。 如果重传报文段则会有报文序列号重复 Ø****TCP 连接的 throughput (bytes transferred per unit time)是多少?请 写出你的计算过程。 总共传输数据的字节数为153029-1=153028B 所用时间为1.547496-0.178179(第一次握手)=1.369317秒 吞吐量throughput=153028B/1.369317秒=111,754.9844192397B/s。 第一个报文(第一次握手) 最后一个报文 (4)、IP分析 (1) 启动 Wireshark 并开始数据包捕获 (2) 启动 pingplotter 并“Address to Trace Window”域中输入目的地址。 在“# of times to Trace”域中输入“3”,这样就不过采集过多的数据。 Edit->Options->Packet,将 Packet Size(in bytes,default=56)域设为 56,这 样将发送一系列大小为 56 字节的包。然后按下“Trace”按钮。得到的 pingplotter 窗口如图 6-7 所示 (1) Edit->Options->Packet,然后将 Packet Size(in bytes,default=56) 域改为 2000,这样将发送一系列大小为 2000 字节的包。然后按下 “Resume”按钮。 (2) 最后,将 Packet Size(in bytes,default=56)域改为 3500,发送一 系列大小为 3500 字节的包。然后按下“Resume”按钮。 (3) 停止 Wireshark 的分组捕获。 Ø 你主机的IP地址是什么? 本机IPV4: 172.20.37.162(启动另一台主机进行IP实验) Ø 在IP数据包头中,上层协议(upper layer)字段的值是什么? 上层协议(upper layer)字段是ICMP:1 Ø IP头有多少字节?该IP数据包的净载为多少字节?并解释你是怎** 样确定 IP头字节20byte IP数据包净载36byte Total Length-Header Length=数据包净载36byte Ø 该IP数据包的净载大小的? IP数据包净载36byte Ø 该IP数据包分片了吗?解释你是如何确定该数据包是否进行了 进行了分片 查看标志为MF=1,代表进行了分片 (2)单击Source列按钮,这样将对捕获的数据包按源IP地址排序。 选择第一个你的主机发出的ICMP Echo Request消息,在packet details窗 口展开数据包的Internet Protocol部分。在“listing of captured packets”窗口, 你会看到许多后续的ICMP消息(或许还有你主机上运行的其他协议的数 据包) 思考下列问题: Ø 你主机发出的一系列ICMP消息中IP数据报中哪些字段总是发生 改变? Time to Live、 Identification、 Header Checksum Ø 哪些字段必须保持常量?哪些字段必须改变?为什么? 保持常量:版本号、上层协议、源IP地址和目的IP地址 原因:想要成功让数据包从源地址发送到目的地址,版本号需要固定不变,上层协议也是固定的,源IP地址和目的IP地址也不会在过程中改变 必须改变:Identification,TTL,checknum 原因:Identification是IP数据包的序号,每个包的序号都不同,用于区分不同的数据包 TTL是记录存活时间当经过路由器时候都会使得TTL+1 checknum校验和是根据头部数据经过计算得到的,不同包的校验和一般不一样 Ø 描述你看到的IP数据包Identification字段值的形式。 Identification占16位bit,两个字节byte Identification加一递增 (3)找到由最近的路由器(第一跳)返回给你主机的 ICMP Time-to-live exceeded消息。 思考下列问题: Ø Identification字段和TTL****字段的值是什么? Identification=0x0000 TTL=255 Ø 最近的路由器(第一跳)返回给你主机的****ICMP Time-to-live exceeded****消息中这些值是否保持不变?为什么? 结果: 最近的路由器(第一跳)返回给你主机的ICMP Time-to-live exceeded消息中 TTL保持不变,Identification字段不断改变 原因:第一跳路由器设置TTL字段为RFC指定的值,因此始终保持不变; 在同一跳,Identification用于区分不同的IP数据包,标识每一个IP字段,是唯一的,因此不断改变。 (4)单击Time列按钮,这样将对捕获的数据包按时间排序。找到在 将包大小改为2000字节后你的主机发送的第一个ICMP Echo Request消 息。 思考下列问题: Ø 该消息是否被分解成不止一个IP数据报? 分解成了2个IP数据报 Ø 观察第一个IP分片,IP头部的哪些信息表明数据包被进行了分 片?IP头部的哪些信息表明数据包是第一个而不是最后一个分 片?该分片的长度是多少 More fragments位被置为1表明进行了分片 Flags标识位中,More fragments位被置为1,表示其被分片,但不是最后一个分片。 该分片总长度1500B,头部长度20B,数据长度1480B C. 找到在将包大小改为3500字节后你的主机发送的第一个ICMP Echo Request消息。 思考下列问题: Ø原始数据包被分成了多少片? 分成了3片 各自数据分片为1480,1480,520 Ø这些分片中IP数据报头部哪些字段发生了变化? 发生变化: Total length:随着分片长度变化而变化 片偏移量:随着分片产生变化而变化,第一片的分片offset=0,第二片的分片的 offset 为1480,最后一片为2960 标志位:前两片的 MF 位均为1,而最后一片MF为0; Checksum:随着分片内容变化而变化 (5)、ARP分析 (1)利用 MS-DOS 命令:arp 或 c:\windows\system32\arp 查看主机 上 ARP 缓存的内容。 (2)在命令行模式下输入:ping 172.20.45.246(或其他 IP 地址) (3)启动 Wireshark,开始分组俘获。抓取的数据包 思考下面问题: (1)利用 MS-DOS 命令:****arp 或 c:\windows\system32\arp 查看主机 上 ARP 缓存的内容。说明 ARP 缓存中每一列的含义是什么**? ARP缓存中第一列为接口的IP地址,第二列为接口的(物理地址)MAC地址,第三列为地址的类型,动态配置或静态配置。 (2)清除主机上 ARP 缓存的内容,抓取 ping 命令时的数据包。 (3)分析数据包回答下面的问题: ØARP数据包的格式是怎样的?由几部分构成,各个部分所占的字 节数是多少? 其由9部分构成,分别是: 硬件类型 2字节 协议类型 2字节 硬件地址长度 6字节 协议长度 4字节 操作类型 2字节 发送方MAC地址 6字节 发送方IP地址 4字节 目标MAC地址 6字节 目标IP地址 4字节 Ø如何判断一个ARP****数据是请求包还是应答包? 根据操作类型字段判断 查看OP字段 OP为0x0001 ARP数据为请求包 OP为0x0002 ARP数据是应答包 Ø为什么ARP查询要在广播帧中传送,而ARP****响应要在一个有着明 确目的局域网地址的帧中传送? 原因: 在最初进行ARP查询时候发送主机不知道目的IP对应的MAC地址,所以ARP查询要使用广播查询在局域网内。 而ARP响应报文明确知道发起查询的主机MAC地址并且这次的查询结果只有该发起查询的主机需要,因此ARP响应要在一个有着明确目的局域网地址的帧中传送 (6)、UDP分析 (1)启动 Wireshark,开始分组捕获; (2)发送 QQ 消息给你的好友; (3)停止 Wireshark 组捕获; (4)在显示筛选规则中输入“udp”并展开数据包的细节,如图 6-14 所示。 分析 QQ 通讯中捕获到的 UDP 数据包。根据操作思考以下问题: Ø消息是基于UDP的还是TCP****的? 基于UDP的 Ø你的主机ip地址是什么?目的主机ip****地址是什么? 我的主机ip:172.20.45.246 目的主机ip:39.156.132.122 Ø你的主机发送QQ消息的端口号和QQ****服务器的端口号分别是多 少? 我的主机发送QQ消息的端口号4001 QQ服务器的端口号8000 Ø****数据报的格式是什么样的?都包含哪些字段,分别占多少字节?  UDP数据报由5部分构成 源端口号 4字节 目的端口号 4字节 长度 4字节 校验和 4字节 应用层数据 Ø为什么你发送一个ICQ****数据包后,服务器又返回给你的主机一个 ICQ数据包?这UDP****的不可靠数据传输有什么联系?对比前面的 TCP协议分析,你能看出UDP****是无连接的吗? 1. 原因:因为我发送了ICQ数据包,服务器需要将接收到的结果通过返回ICQ数据包的方式发回给客户端 2. 联系:在UDP不可靠数据传输的机制条件,服务器只会提供一次返回的ACK,所无法保证数据一定准确到达 3. 能够看出UDP是无连接:和TCP相比,因为UDP数据包没有序列号,因此不能像TCP协议那样先进行握手再进行数据发送。 (7)利用 WireShark 进行 DNS 协议分析 (1)打开浏览器键入:www.baidu.com (2)打开 Wireshark,启动抓包. (3)在控制台回车执行完毕后停止抓包.Wireshark 捕获的 DNS 报文 如图 6-15 所示。 抓包结果: DNS协议是用来进行域名与IP地址之间的转换的。当一个应用进程需要把域名解析为IP地址时,该应用进程就调用解析程序,把待解析的域名在DNS请求报文中,以UDP数据报方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在DNS应答报文中返回 DNS****协议报文格式 Header 报文头 Question 查询请求 Answer 应答 Authorrity 授权应答 Additional 附加信息 DNS****报文头格式:共 12 个字节 事务ID 标志Flags 问题计数 回答资源记录数 权威名称服务器计数 附加资源记录数 查询问题区域 回答问题区域 权威名称服务器区域 附加信息区域 对应的baidu的DNS有一个请求报文,跟着一个对应的响应报文 AAAA对应的是IPV6地址 A对应的是IPV4地址 查看响应报文的Answer字段 域名 记录中资源数据对应的Name,其格式与查询Name格式相同 类型 说明资源的类型码 类域 该字段与问题记录的查询类型字段相同 生存时间 字段是客户程序保留该资源记录的时间 数据长度 该字段表示数据的长度 数据 域名对应的IP (8)利用 Wireshark 分析 Ethernet 数据帧 以太帧的结构 以太帧起始部分由前同步码和帧开始定界符组成,后面紧跟着一个以太网报头,以 MAC 地址说明目的地址和源地址。以太帧的中部是该帧负载的包含其他协议报头的数据包,如 IP 协议。 以太帧由一个 32 位冗余校验码结尾,用于检验数据传输是否出现损坏。以太帧结构如图所示。 前同步码 用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率, 帧开始定界符 帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器 目的地址 接收帧的网络适配器的物理地址MAC 地址 源地址 发送帧的网络适配器的物理地址(MAC 地址) 类型 上层协议的类型。 数据 也称为效载荷,表示交付给上层的数据。 帧检验序列 FCS 检测该帧是否出现差错 分析包含了 Http GET 数据的 Ethernet frame 可见到 Destination Source Type  |
问题讨论: |
Q1为什么ping一部分IP****地址抓不到对应的ARP A1因为该IP地址已经存在于本机的ARP缓存中,所以wireshark不会再抓取到ARP Q2如何快速找到含有POST的TCP****报文 A2首先再wireshark中搜索POST的HTTP,然后找到POST请求的HTTP,以此向上去查找TCP并且是PSH,ACK的这样就进一步缩小了查找范围 Q3在抓包ICMP时候我的最初结果均是no response A3:换一台主机进行抓包ICMP则能够正常reply,可能是在这台主机上代理或者网络设置出现了错误 Q4:抓包ICMP时候本来应该出现的分片,结果只显示分片最后一片而没有展示其他分片 A4:应该在wireshark的首选项调节Reassmable fragmented Ipv4 datagtams这个选项,否则就会出现上述情况  |
心得体会: |
l 对于wireshark的工具学会了如何去操作,能够熟悉了如何抓取各种数据包并且分析 l 对网络体系结构的各种协议有了进一步的认识 l 对各种的数据报和数据的传输有了更深层次的了解 |